/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.gov.fasepa.sgpf.impressao;

import br.gov.fasepa.sgpf.entity.Cargo;
import br.gov.fasepa.sgpf.entity.ContratoServidor;
import br.gov.fasepa.sgpf.entity.Servidor;
import br.gov.fasepa.sgpf.entity.Setor;
import br.gov.fasepa.sgpf.entity.Subsetor;
import br.gov.fasepa.sgpf.entity.TipoCargo;
import br.gov.fasepa.sgpf.entity.Unidade;
import br.gov.fasepa.sgpf.rn.ContratoServidorRN;
import br.gov.fasepa.sgpf.rn.ServidorRN;
import br.gov.fasepa.sgpf.rn.SetorRN;
import br.gov.fasepa.sgpf.rn.SubsetorRN;
import br.gov.fasepa.sgpf.rn.UnidadeRN;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 *
 * @author marcosdj
 */
public class GeraRelatorio {

    private ContratoServidorRN contratoRN = new ContratoServidorRN();
    private UnidadeRN unidadeRN = new UnidadeRN();
    private SetorRN setorRN = new SetorRN();
    private SubsetorRN subsetorRN = new SubsetorRN();
    private ServidorRN servidorRN = new ServidorRN();

    public List<AtributosRelServidor> preencheRelatorioServidor() {
        AtributosRelServidor srv;
        List<ContratoServidor> listaTemp = contratoRN.obterAtivos();
        ArrayList<AtributosRelServidor> srves = new ArrayList<>();
        for (ContratoServidor c : listaTemp) {
            srv = new AtributosRelServidor();
            srv.setNome(c.getServidor().getNome());
            srv.setMatricula(c.getMatricula() + "/" + c.getVinculo());
            srv.setCargo(c.getServidor().getCargo().getNome());
            srv.setTipoDeCargo(c.getServidor().getTipoDeCargo().getTipo());
            srv.setFuncao(c.getServidor().getFuncao());
            srv.setRg(c.getServidor().getRg());
            srv.setCpf(c.getServidor().getCpf());
            srv.setUnidade(c.getServidor().getUnidade().getSigla());
            srv.setSetor(c.getServidor().getSetor().getSigla());
            srv.setDataAdmissao(c.getServidor().getFormataDataAdmissao());
            srv.setStatus(c.getServidor().getStatus());
            srves.add(srv);
        }
        return srves;
    }

    public List<AtributosRelUnidSetSub> preencheRelatorioUnidades() {
        AtributosRelUnidSetSub rel;
        ArrayList<AtributosRelUnidSetSub> listaTemp = new ArrayList<>();
        List<Unidade> lista = unidadeRN.obtainAll(Unidade.class);
        for (Unidade unidade : lista) {
            rel = new AtributosRelUnidSetSub();
            rel.setSigla(unidade.getSigla());
            rel.setNome(unidade.getNome());
            rel.setEndereco(unidade.getEndereco());
            rel.setCep(unidade.getCep());
            rel.setTelefone1(unidade.getTelefone());
            rel.setTelefone2(unidade.getTelefone2());
            rel.setMunEstado(unidade.getMunicipio().getNome() + "-" + unidade.getEstado().getNome());
            rel.setEmail(unidade.getEmail());
            rel.setResponsavel(unidade.getResponsavel().getNome());
            listaTemp.add(rel);
        }
        return listaTemp;
    }

    public List<AtributosRelUnidSetSub> preencheRelatorioSubsetores() {
        AtributosRelUnidSetSub rel;
        ArrayList<AtributosRelUnidSetSub> listaTemp = new ArrayList<>();
        List<Subsetor> lista = subsetorRN.obtainAll(Subsetor.class);
        if (lista != null) {
            for (Subsetor subs : lista) {
                rel = new AtributosRelUnidSetSub();
                rel.setSigla(subs.getSigla());
                rel.setNome(subs.getNome());
                rel.setTelefone1(subs.getRamal());
                rel.setResponsavel(subs.getResponsavel().getNome());
                rel.setSetor(subs.getSetor().getSigla());
                listaTemp.add(rel);
            }
        }
        return listaTemp;
    }

    public List<AtributosRelUnidSetSub> preencheRelatorioSetores() {
        AtributosRelUnidSetSub rel;
        ArrayList<AtributosRelUnidSetSub> listaTemp = new ArrayList<>();
        List<Setor> lista = setorRN.obtainAll(Setor.class);
        if (lista != null) {
            for (Setor setor : lista) {
                rel = new AtributosRelUnidSetSub();
                rel.setSigla(setor.getSigla());
                rel.setNome(setor.getNome());
                rel.setTelefone1(setor.getRamal());
                rel.setResponsavel(setor.getResponsavel().getNome());
                rel.setUnidade(setor.getUnidade().getSigla());
                listaTemp.add(rel);
            }
        }
        return listaTemp;
    }

    public List<AtributosRelServidor> preencheReltorioServidorCargo(Cargo cargo) {
        AtributosRelServidor srv;
        List<Servidor> listaTemp = cargo.getServidorList();
        ArrayList<AtributosRelServidor> srves = new ArrayList<>();
        for (Servidor c : listaTemp) {
            if (c.getStatus().trim().equals("Ativo")) {
                srv = new AtributosRelServidor();
                srv.setNome(c.getNome());
                srv.setCargo(c.getCargo().getNome());
                srv.setTipoDeCargo(c.getTipoDeCargo().getTipo());
                srv.setFuncao(c.getFuncao());
                srv.setRg(c.getRg());
                srv.setCpf(c.getCpf());
                srv.setUnidade(c.getUnidade().getSigla());
                srv.setSetor(c.getSetor().getSigla());
                srv.setDataAdmissao(c.getFormataDataAdmissao());
                srv.setStatus(c.getStatus());
                srves.add(srv);
            }
        }
        return srves;
    }

    public List<AtributosRelServidor> preencheReltorioServidorSetor(Setor s) {
        AtributosRelServidor srv;
        List<Servidor> listaTemp = s.getServidorList();
        ArrayList<AtributosRelServidor> srves = new ArrayList<>();
        for (Servidor c : listaTemp) {
            if (c.getStatus().trim().equals("Ativo")) {
                srv = new AtributosRelServidor();
                srv.setNome(c.getNome());
                srv.setCargo(c.getCargo().getNome());
                srv.setTipoDeCargo(c.getTipoDeCargo().getTipo());
                srv.setFuncao(c.getFuncao());
                srv.setRg(c.getRg());
                srv.setCpf(c.getCpf());
                srv.setUnidade(c.getUnidade().getSigla());
                srv.setSetor(c.getSetor().getSigla());
                srv.setDataAdmissao(c.getFormataDataAdmissao());
                srv.setStatus(c.getStatus());
                srves.add(srv);
            }
        }
        return srves;
    }

    public List<AtributosRelServidor> preencheReltorioServidorAtivo(Cargo cg, TipoCargo t, String sexo) {
        AtributosRelServidor srv;
        List<Servidor> listaTemp = null;
        if (cg != null && t == null) {
            listaTemp = cg.getServidorList();
        }
        if (t != null && cg == null) {
            listaTemp = t.getServidorList();
        }
        if (cg != null && t != null) {
            listaTemp = servidorRN.listaComFiltro(cg, t);
        }

        if (cg == null && t == null) {
            listaTemp = servidorRN.obtainAll(Servidor.class);
        }
//        List<Servidor> 
        List<AtributosRelServidor> srves = null;
        ArrayList<AtributosRelServidor> todos = new ArrayList<>();
        ArrayList<AtributosRelServidor> filtro = new ArrayList<>();
        for (Servidor c : listaTemp) {
            if (c.getStatus().trim().equals("Ativo")) {
                srv = new AtributosRelServidor();
                srv.setNome(c.getNome());
                srv.setCargo(c.getCargo().getNome());
                srv.setTipoDeCargo(c.getTipoDeCargo().getTipo());
                srv.setFuncao(c.getFuncao());
                srv.setRg(c.getRg());
                srv.setCpf(c.getCpf());
                if (c.getUnidade() != null) {
                    srv.setUnidade(c.getUnidade().getSigla());
                }
                if (c.getSetor() != null) {
                    srv.setSetor(c.getSetor().getSigla());
                }
                srv.setDataAdmissao(c.getFormataDataAdmissao());
                srv.setStatus(c.getStatus());

                for (ContratoServidor cs : c.getContratoServidorList()) {
                    if (Objects.equals(c.getId(), cs.getServidor().getId()) && cs.getStatus().equals("ativo")) {
                        srv.setMatricula(cs.getMatricula() + "/" + cs.getVinculo());
                    }
                }
                if (sexo != null) {
                    if (c.getSexo().trim().equals(sexo)) {
                        filtro.add(srv);
                        srves = filtro;
                    }
                } else {
                    todos.add(srv);
                    srves = todos;
                }
            }
        }
        return srves;
    }

    public List<Unidade> preencheRelServidorUnd(Unidade u) {
        List<Unidade> resposta = new ArrayList<>();
        Unidade temp = unidadeRN.obtain(Unidade.class, u.getId());
        if (temp != null) {
            resposta.add(u);
        }
        return resposta;
    }

    public List<AtributosRelUnidSetSub> preencheRelServUndFiltro(Unidade u, Cargo c, TipoCargo t) {
        AtributosRelUnidSetSub rel;
        List<AtributosRelUnidSetSub> resposta = new ArrayList<>();
        List<Servidor> servidor = new ArrayList<>();
        Unidade temp = unidadeRN.obtain(Unidade.class, u.getId());
        if (temp != null) {
            rel = new AtributosRelUnidSetSub();
            rel.setSigla(temp.getSigla());
            rel.setNome(temp.getNome());
            rel.setEndereco(temp.getEndereco());
            rel.setCep(temp.getCep());
            rel.setTelefone1(temp.getTelefone());
            rel.setTelefone2(temp.getTelefone2());
            rel.setMunEstado(temp.getMunicipio().getNome() + "-" + temp.getEstado().getNome());
            rel.setEmail(temp.getEmail());
            rel.setResponsavel(temp.getResponsavel().getNome());
            if (temp.getServidorList().size() > 0) {
                for (Servidor ss : temp.getServidorList()) {
                    if (c != null) {
                        if (Objects.equals(c.getId(), ss.getCargo().getId()) && t == null) {
                            servidor.add(ss);
                        }
                    }
                    if (t != null) {
                        if (Objects.equals(t.getId(), ss.getTipoDeCargo().getId()) && c == null) {
                            servidor.add(ss);
                        }
                    }

                    if (c != null && t != null) {
                        if (Objects.equals(ss.getCargo().getId(), c.getId()) && Objects.equals(ss.getTipoDeCargo().getId(), t.getId())) {
                            servidor.add(ss);
                        }
                    }
                }
                if (c == null && t == null) {
                    rel.setServidor(temp.getServidorList());
                } else {
                    rel.setServidor(servidor);
                }
            }
            resposta.add(rel);
        }
        return resposta;
    }

    public List<AtributosRelUnidSetSub> preencheRelatorioSubsetores(Setor s) {
        AtributosRelUnidSetSub rel;
        ArrayList<AtributosRelUnidSetSub> listaTemp = new ArrayList<>();
        List<Subsetor> lista = s.getSubsetorList();
        if (lista != null) {
            for (Subsetor subs : lista) {
                rel = new AtributosRelUnidSetSub();
                rel.setSigla(subs.getSigla());
                rel.setNome(subs.getNome());
                rel.setTelefone1(subs.getRamal());
                rel.setResponsavel(subs.getResponsavel().getNome());
                rel.setSetor(subs.getSetor().getSigla());
                listaTemp.add(rel);
            }
        }
        return listaTemp;
    }

    public List<AtributosRelUnidSetSub> preencheRelatorioSetores(Unidade u) {
        AtributosRelUnidSetSub rel;
        ArrayList<AtributosRelUnidSetSub> listaTemp = new ArrayList<>();
        List<Setor> lista = u.getSetorList();
        if (lista != null) {
            for (Setor setor : lista) {
                rel = new AtributosRelUnidSetSub();
                rel.setSigla(setor.getSigla());
                rel.setNome(setor.getNome());
                rel.setTelefone1(setor.getRamal());
                rel.setResponsavel(setor.getResponsavel().getNome());
                rel.setUnidade(setor.getUnidade().getSigla());
                listaTemp.add(rel);
            }
        }
        return listaTemp;
    }

}
